# ReactOS Guide

_**WARNING:** ReactOS is alpha software (in June 2021). It can be highly unstable at times. Please do not rely on it or these instructions for serious work._

## Starting with QEMU

On Linux, install `qemu` and `qemu-kvm` (or if not present, `libvirt`). Create a directory somewhere. Download ReactOS boot ISO (not live ISO). Currently only 0.4.14 RC works for me (I tried with [`ReactOS-0.4.14-RC-69-g99f203c-iso.zip`](https://sourceforge.net/projects/reactos/files/ReactOS/0.4.14/ReactOS-0.4.14-RC-69-g99f203c-iso.zip/download)). Rename the ISO to `reactos.iso`. Then create an HD image to store your changes that happens inside the machine:

```sh
qemu-img create -f qcow2 reactos.img 4G
```

`qcow2` takes space gradually as you fill up the space. `4G` = 4GBs. You can choose any size you like. Having more space will let you store more programs and files.

Create a script to start the machine:

```sh
touch run-reactos.sh
chmod +x run-reactos.sh
```

Put something like this on `run-reactos.sh`:

```sh
#!/usr/bin/env sh
cd $(dirname $0)
qemu-system-$(uname -m) -m 1300M -enable-kvm -net nic,model=ne2k_pci -net user -device ac97 -cdrom reactos.iso -hda reactos.img
```

Now run the `run-reactos.sh` script and setup as usual.

## Sharing files

This is to help with sharing files from host OS to ReactOS guest. The process described here requires `mkisofs` and does not require complicated commands. But there are other ways mentioned [here](https://reactos.org/wiki/Transfer_files_from_the_host_OS_to_the_virtual_drive#Linux).

- Install mkisofs. Depending on your distro it may be called `cdrtools`, `libisofs`, `libisofs6`, `libisofs1` etc. Search your package repos with "isofs" to get a hint. You can also [build libisofs from source](https://dev.lovelyhq.com/libburnia/libisofs) if you want.
- Create a directory named `_shared`. The idea behind this is that the files you want to share should be inside this directory. And when you run the script, it will make a .iso file out of it and add it in the qemu command with `-cdrom` parameter.
- When you run this, it may take some time depending on the content of the _share directory. So, create a separate run script so that you have a choice to run the iso one when needed. Create file called `run-reactos-with-share.sh`, then run `chmod +x run-reactos-with-share.sh`. Put this in the file:

```sh
#!/usr/bin/env sh
cd $(dirname $0)
[ ! -d _share ] && mkdir _share
if [ -n "$(command -v mkisofs)" ] && [ "$(stat -t _share)" != "$(cat _share_stat)" ]; then # if anything inside _share changed, create iso
	[ -f _share.iso ] && rm _share.iso
	if [ "$(ls -A _share)" ]; then
		mkisofs -iso-level 4 -J -l -D -N -joliet-long -untranslated-filenames -V "SHARE" -o _share.iso _share
		[ "$?" != '0' ] && echo 'ISO creation failed!' && rm _share.iso &>/dev/null && exit 1
	fi
	stat -t _share > _share_stat
fi
[ -f _share.iso ] && cdrom="-cdrom _share.iso"
qemu-system-$(uname -m) -m 1300M -enable-kvm -net nic,model=ne2k_pci -net user -device ac97 "$cdrom" -hda reactos.img
```

- After ReactOS boots up, go to My Computer and you will see a CD-ROM drive with "SHARE" label with all your files inside.

**NOTE:** ISO standard is very old and limited, and ReactOS can't handle many errors. If you mess up anything, for example use long label name (`-V`) or forget to create the directory, it will hang the system on boot. Run the script on a terminal when you can't figure out what's wrong. ISO is read only tech, so this can be used to share files from host to guest, not the other way around.

## Abyss web server

- Install Abyss web server from React OS Application Manager or download from https://apprelium.com/downloads/
- If you reboot and it didn't start on startup, go to Start Menu - Programs - Abyss Web Server - Abyss Web Server X1 to start it
- On the other hand, if you want it to start on startup, but it doesn't, then go to Start Menu - Programs - Abyss Web Server - Abyss Web Server Startup Configuration and choose to start up on logon

### PHP

- Go to https://apprelium.com/downloads/php.html#win and download PHP 5.4.45 (the last version supporting Windows XP)
- Now continue with instructions available in the https://apprelium.com/abyssws/php.html page under "On Windows" heading
- Now go to `C:\Program Files\Abyss Web Server\htdocs`, create a file named `phpinfo.php`, edit the file and put:

```php
<?php
phpinfo();
```

- Then open a web browser (e.g. K-meleon or Firefox) and visit `http://localhost/phpinfo.php`
- If you've done everything correctly you should see phpinfo as expected

### MariaDB

- Go to: https://downloads.mariadb.org/mariadb/+releases/
- Download 10.1.13 win32 msi file and install it. When it asks to set a password for root, choose a password and take a note of it. You can optionally check the UTF-8 checkbox, but otherwise default should be ok for everything else.
- It will stop when you reboot. To start it, go to `C:\Program Files\Maria DB 10.1\bin` and double click `mysqld.exe`
- To start it automatically on startup, go to Start Menu - Programs and right click **Startup** and select **Explore**. Now copy the mysqld.exe and right click on the explorer of Startup that you just opened and select Paste as Link

### Adminer

- Go to https://www.adminer.org
- Download the adminer php file (avoid the "for MySQL" version since you are using MariaDB)
- Copy the php file to where you want it. e.g. copy it to `C:\Program Files\Abyss Web Server\htdocs\adminer.php`
- Then access it via web browser. e.g. `http://localhost/adminer.php`
- Enter username `root`, password as the one you used while installing it and you can leave the database name empty

## Unijoy

Unijoy from Ekushey is a great way to type Bangla. If you like Unijoy layout, you can try this:

- Go to: https://www.ekushey.org/?page/uni_joy_layout
- Download the keyboard input system installer for Windows XP Service Pack 2 or 3
- Extract and double click **Setup.exe** and continue install
- Search for "solaimanlipi download" and download SolaimanLipi font. Double click the .ttf file and click Install
- Close other programs as it may ask to reboot after changing settings
- Right click the EN icon on system tray and select Preferences
- Click Add
- Unfortunately there's no "Bangla" or "Bengali" in the **Input Language** list, so choose Basque
- Change **Keyboard layout/IME** to **Bangla - UniJoy** and add
- Click **Key Settings** and then **Change Key Sequence** to configure the keyboard shortcut to change layout
- When you click OK it may ask to reboot. Click Yes

When you reboot, open up Wordpad, select SolaimanLipi as font and press the key combination to change layout. Now type anything to see Bangla characters.
